/**
 * 封装购物车相关的API函数
 *
 */

import request from '@/utils/request'
import { DELETE, GET, POST, PUT } from '@/constant'

let API = {
  /**
   * 获取商品的最新价格、库存、是否有效
   * @param skuId
   */
  getNewCartGoods(skuId) {
    return request(`/goods/stock/${skuId}`, GET)
  },
  /**
   * 获取商品对应的sku数据
   * @param skuId
   */
  getGoodsSku(skuId) {
    return request(`/goods/sku/${skuId}`, GET)
  },
  /**
   * 合并购物车
   * @param cartList 购物车信息列表, 每个元素是一个对象 skuId | selected | count
   */
  mergeCart(cartList) {
    return request('/member/cart/merge', POST, cartList)
  },
  /**
   * 获取购物车列表
   */
  getCartList() {
    return request('/member/cart', GET)
  },
  /**
   * 加入购物车
   * @param skuId skuId
   * @param count 加入购物车数量
   */
  insertCart(skuId, count) {
    return request('/member/cart', POST, {
      skuId,
      count
    })
  },
  /**
   * 删除购物车商品, 支持批量
   * @param ids     skuId集合, 数组形式, 但是也要包装成对象!!! {ids: ['1148090']}
   */
  deleteCart(ids) {
    return request('/member/cart', DELETE, { ids })
  },
  /**
   * 修改购物车数量 (状态 / 数量)
   * @param skuId
   * @param selected  选中状态
   * @param count     加入购物车数量
   */
  updateCart(skuId, selected, count) {
    // 若没有传递selected或count, 它的值就是undefined, 后端会做动态SQL拼接处理
    return request(`/member/cart/${skuId}`, PUT, {
      selected,
      count
    })
  },
  /**
   * 全选与取消全选操作
   * @param selected  选中状态
   * @param ids       skuId集合
   */
  checkAllCart(selected, ids) {
    return request('/member/cart/selected', PUT, {
      selected,
      ids
    })
  }
}

export default API
